function u = enforce_constraints_bad2(u, d_min, Ct_bounds)
    % 约束投影，确保粒子满足最小距离约束，并在可行范围内
    % u: 粒子位置向量 [t1x, t1y, t2x, t2y, ..., rx, ry]
    % d_min: 最小距离
    % Ct_bounds: 发射天线的可行范围，形如 [x_min, x_max; y_min, y_max]

    % 提取天线信息
    N = length(u) / 2;           % 发射天线的个数
    t = reshape(u, [2, N]);      % 发射天线坐标 [2 × N]

    % 可行范围约束
    x_min = Ct_bounds(1, 1); x_max = Ct_bounds(1, 2);
    y_min = Ct_bounds(2, 1); y_max = Ct_bounds(2, 2);

    % 投影到可行范围内
    t(1, :) = max(min(t(1, :), x_max), x_min);
    t(2, :) = max(min(t(2, :), y_max), y_min);

    % 最小距离约束迭代调整
    max_iter = 100;             % 最大迭代次数
    for iter = 1:max_iter
        adjusted = false;       % 标记是否有天线位置被调整

        for i = 1:N
            for j = i+1:N
                dist = norm(t(:, i) - t(:, j));
                if dist < d_min
                    % 计算调整方向
                    direction = (t(:, j) - t(:, i)) / dist;
                    % 计算需要的偏移量，使两者距离达到 d_min
                    offset = (d_min - dist) / 2;
                    
                    % 尝试调整两个天线的位置
                    t(:, i) = t(:, i) - direction * offset;
                    t(:, j) = t(:, j) + direction * offset;

                    % 再次投影到可行范围内
                    t(1, i) = max(min(t(1, i), x_max), x_min);
                    t(2, i) = max(min(t(2, i), y_max), y_min);
                    t(1, j) = max(min(t(1, j), x_max), x_min);
                    t(2, j) = max(min(t(2, j), y_max), y_min);

                    adjusted = true;
                end
            end
        end

        % 如果没有任何调整，说明所有天线已满足最小距离约束
        if ~adjusted
            break;
        end
    end

    % % 更新位置向量
    % u = t(:);
    t_line1 = t(1,:);
    t_line2 = t(2,:);
    sorted_t_line2 = sort(t_line2);
    t_comb = [t_line1.' ,sorted_t_line2.'].'

    % --- 更新位置向量 ---
    u = [t_comb(:)];
end
